package model

import (
	"os"

	"gitee.com/liumou_site/gcs"
)

// InitConfig 初始化配置并创建服务。
// 该函数首先检查当前环境是否为Linux、是否具有root权限以及是否支持systemd。
// 然后根据提供的源路径、目标路径和端口号创建一个新的Info结构体实例，并尝试创建服务。
// 如果创建服务失败，则记录错误并返回；如果成功，则记录成功信息并退出程序。
//
// 参数:
//   - source: 源路径，表示需要操作的源文件或目录。
//   - target: 目标路径，表示操作的目标文件或目录。
//   - port: 端口号，表示服务监听的端口。
//   - sec: 检测间隔时间（秒）
//   - china: 是否使用中文
//   - debug: 是否启用调试模式
func InitConfig(source, target string, port, sec int, china, debug bool) {
	// 获取语言管理器
	langManager := GetLanguageManager()

	// 检查当前环境是否为Linux，如果不是，可能会影响后续操作。
	CheckLinuxEnvironment()
	// 检查当前进程是否具有root权限，如果不是，可能会影响后续操作。
	CheckRootPermission()
	// 检查当前系统是否支持systemd，如果不支持则记录错误并返回。
	CheckSystemd()

	// 创建一个新的Info结构体实例，并设置其源路径、目标路径和端口号。
	i := new(Info)
	i.Port = port
	i.Source = source
	i.Target = target
	i.China = china
	i.Interval = sec
	i.Default = false
	var err error

	// 检查是否为默认安装，并相应设置Init字段
	isDefault := IsDefault(china, debug)
	if isDefault {
		i.Init = true
		i.Source = "/etc/ssh"
		langManager.Info("检测到系统包SSH，使用默认路径: /etc/ssh", "Detected system package SSH, using default path: /etc/ssh")
		err = CheckSourcePath(i.Source)
		if err != nil {
			langManager.Error("检查源路径失败:", "Check source path failed:", err)
			os.Exit(2)
		}
		i.Default = true
	} else {
		i.Init = false
		langManager.Info("检测到编译安装SSH，使用自定义路径: ", "Detected compiled SSH installation, using custom path: ", i.Source)
		err = CheckSourcePath(i.Source)
		if err != nil {
			langManager.Error("检查源路径失败:", "Check source path failed:", err)
			os.Exit(2)
		}
	}
	i.Cmd = gcs.NewShell()
	if i.Debug {
		langManager.Debug("正在初始化配置文件", "Initializing configuration file")
	}
	i.InitConfig()
	// 尝试创建服务，如果失败则记录错误并返回。
	err = CreateSshGuardianService(i)
	if err != nil {
		langManager.Error("创建服务失败:", "Create service failed:", err)
		// 提供详细的错误信息以帮助诊断问题
		langManager.Error("服务注册失败，请检查:", "Service registration failed, please check:")
		langManager.Error("1. 是否以root用户运行", "1. Running as root user")
		langManager.Error("2. 系统是否支持systemd", "2. Systemd support")
		langManager.Error("3. 程序路径权限", "3. Program path permissions")
		return
	}

	// 记录服务初始化成功的信息并退出程序。
	langManager.Info("初始化服务成功", "Init service success")
	os.Exit(0)
}
